iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 17
1

什麼是多型?

多型的特性在於可重新改寫指定的繼承方法(包括修改 , 結合 , 重新封裝...),而本身繼承是有很多限制的(無法多向繼承 , 多調用),而用多型就可克服這些限制。所以也被看做繼承與封裝的變形。

OOP多型與編譯多型

OOP多型是一種設計程式的型態,它會直接在執行時做表達。但編譯多型是編譯器會把相關聯的程式做洗牌(結合),如此一來便能安全與高效能同時兼具。

變數多型與函數多型

變數多型在python裡較不常看到,但在c++裡可以用作指標(這裡就不介紹了)。因為python的變數比較偏向屬性方面,所以python就可把方法(函數)做多型應用。
結構:class.函數a.函數b...... 就是個樹狀結構
多型就是在函數(方法)去做改寫
Ex:(多型的結合)

class mouse():
    def price(self):
        print("1000")
    
class keyboard():
    def price(self):
        print("5000")   
d = [mouse(), keyboard()] #寫入陣列
for i in d:
    #print(i.price()) #空物件None
    i.price()

這就是萬般皆物件的印證,所以調用print()自然就沒有東西(None)


然而這只是最簡單的多型表達式,要學習完多型必須了解其他用法:

super()

這是昨天繼承的程式碼:

class bank(object):
    def __init__(self, acct , pwd): 
        self.acct = acct
        self.pwd = pwd
    def sss(self):
        print(f'welcome~{self.acct}')
        print(f'pwd is {self.pwd}')
#繼承
class DB(bank):
    def code(self):
        print(f'welcome~{self.acct}')
        print(f'pwd is {self.pwd}')

這樣的程式碼不僅累贅,而且容易出錯。所以用super()就可將一個方法(函式內部) 可繼承的全部調用過來,減少打錯程式碼的機率。

class bank(object):
    def __init__(self, acct , pwd): 
        self.acct = acct
        self.pwd = pwd
    def sss(self):
        print(f'welcome~{self.acct}')
        print(f'pwd is {self.pwd}')
#繼承
class DB(bank):
    def code(self):
        #print(f'welcome~{self.acct}')
        #print(f'pwd is {self.pwd}')
        super().sss()

==>當然super()可不只這樣,明天會介紹的MRO(繼承順序) 會常用到它


上一篇
[D16] OOP之設計1
下一篇
[D18] OOP之設計3
系列文
從寫程式到脫離菜雞的歷練(以python為主的資處與檔案權限)32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言